package socket

import (
	"github.com/gorilla/websocket"
	"sync"
	"time"
)

var ClientMap *ClientMapStruct
// ClientMapStruct 外部公共使用
type ClientMapStruct struct {
	data sync.Map   //key 是客户端IP  value 就是 websocket 连接对象
}

func init()  {
	ClientMap =&ClientMapStruct{}
}

func (cli *ClientMapStruct)Store(conn *websocket.Conn)  {
	wsClient:= NewWsClient(conn)
	cli.data.Store(conn.RemoteAddr().String(),wsClient)
	//后端心跳,如果发送信息给前端出错,就移除此次连接
	go wsClient.Ping(time.Second*10)
	// 独立写循环
	//go wsClient.WriteLoop()
	//处理读循环
	go wsClient.ReadLoop()
	//处理总控制循环
	go wsClient.HandlerLoop()
}

func (cli *ClientMapStruct)Remove(conn *websocket.Conn)  {
	cli.data.Delete(conn.RemoteAddr().String())
}

// SendAll 向所有客户端发送消息
//func (cli *ClientMapStruct)SendAll(msg string)  {
//	cli.data.Range(func(key, value any) bool {
//		if WC,ok:=value.(*WsClient);ok{
//			var user User
//			user=User{"周树高",30,"男"}
//			if err:=WC.Conn.WriteJSON(&user);err!=nil{
//				cli.Remove(WC.Conn)
//			}
//		}
//		return true
//	})
//}




